package com.gzx.risk.core.apis.context;

import java.time.LocalDate;
import java.time.Period;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;

public class AgeCalculator {

	/**
	 * 根据出生日期计算年龄
	 * 
	 * @param birthDate 出生日期（LocalDate类型）
	 * @return 计算出的年龄
	 */
	public static int calculateAge(LocalDate birthDate) {
		LocalDate currentDate = LocalDate.now();

		// 如果出生日期在当前日期之后，返回0
		if (birthDate.isAfter(currentDate)) {
			return 0;
		}

		Period period = Period.between(birthDate, currentDate);
		return period.getYears();
	}

	/**
	 * 从字符串解析出生日期并计算年龄
	 * 
	 * @param birthDateStr 出生日期字符串（格式：yyyy-MM-dd）
	 * @return 计算出的年龄
	 * @throws DateTimeParseException 如果日期格式不正确
	 */
	public static int calculateAge(String birthDateStr) throws DateTimeParseException {
		DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
		LocalDate birthDate = LocalDate.parse(birthDateStr, formatter);
		return calculateAge(birthDate);
	}

	public static void main(String[] args) {
		// 测试示例
		try {
			// 测试1：使用LocalDate
			LocalDate birthDate1 = LocalDate.of(2000, 8, 8);
			System.out.println("年龄：" + calculateAge(birthDate1));

			// 测试2：使用字符串
			String birthDateStr = "19790209"; // 闰年2月29日
			System.out.println("年龄：" + calculateAge(birthDateStr));

			// 测试3：未来的日期
			LocalDate futureDate = LocalDate.of(2030, 1, 1);
			System.out.println("未来日期的年龄：" + calculateAge(futureDate));
		} catch (DateTimeParseException e) {
			System.out.println("日期格式错误：" + e.getMessage());
		} catch (IllegalArgumentException e) {
			System.out.println("参数错误：" + e.getMessage());
		}
	}
}
